package practice8;

/**
 * # 问题描述
 * - 如果一对兔子每月生一对兔子；一对新生兔，从第二个月起就开始生兔子；
 * 假定每对兔子都是一雌一雄，试问一对兔子，第 `n` 个月能繁殖成多少对兔子？
 * （举例，第1个月是1对兔子，第2个月是2对兔子）
 * <p>
 * ## 输入格式
 * - 数字
 * <p>
 * ## 输出格式
 * - 数字
 * <p>
 * ## 输入样例
 * - 5
 * <p>
 * ## 输出样例
 * - 8
 * <p>
 * ## 数据范围
 * - `[1, 75]`
 * <p>
 * ## 测试数据集
 * - 样例1
 * - 输入：`5`
 * - 输出：`8`
 * - 样例2
 * - 输入：`1`
 * - 输出：`1`
 * - 样例3
 * - 输入：`15`
 * - 输出：`987`
 * - 样例4
 * - 输入：`50`
 * - 输出：`20365011074`
 */
public class Main {
    public static long solution(int A) {
        // Edit your code here
        if (A == 1) {
            return 1; // 第1个月有1对兔子
        } else if (A == 2) {
            return 2; // 第2个月有2对兔子
        }

        long first = 1; // 第1个月的兔子数
        long second = 2; // 第2个月的兔子数
        long result = 0;

        for (int i = 3; i <= A; i++) {
            result = first + second; // 计算第i个月的兔子数
            first = second; // 更新first为上一个月的兔子数
            second = result; // 更新second为当前月的兔子数
        }

        return result;
        //return 1;
    }
    public static void main(String[] args) {
        // Add your test cases here
        System.out.println(solution(5) == 8);
        System.out.println(solution(1) == 1);
        System.out.println(solution(15) == 987);
        System.out.println(solution(50) == 20365011074L);
    }
}
